﻿//-----------------------------------------------------------------------------------------
// <copyright file="FlakerService.Flakosphere.cs" company="Jakub Florczyk (www.jakubflorczyk.pl)">
//      Copyright © 2009 Jakub Florczyk (www.jakubflorczyk.pl)
//      http://flakernet.codeplex.com
// </copyright>
//-----------------------------------------------------------------------------------------

namespace FlakerNET
{
    using System;
    using System.Globalization;
    using FlakerNET.Containers;

    /// <summary>
    /// Rozmiar zwracanych awatarów
    /// </summary>
    public enum AvatarsSize
    {
        /// <summary>
        /// Rozmiar 16px.
        /// </summary>
        Small, 

        /// <summary>
        /// Rozmiar 50px.
        /// </summary>
        Medium,

        /// <summary>
        /// Rozmiar 80px.
        /// </summary>
        Big
    }

    /// <summary>
    /// Flaker serwis.
    /// </summary>
    public partial class FlakerService
    {       
        /// <summary>
        /// Wpisy oceniane.
        /// </summary>
        public const string SourceFavorites = "favorites";

        /// <summary>
        /// Wpisy komentowane.
        /// </summary>
        public const string SourceCommented = "commented";

        /// <summary>
        /// Wpisy zawierające zdjęcia.
        /// </summary>
        public const string SourcePhotos = "photos";

        /// <summary>
        /// Wpisy zawierające filmy.
        /// </summary>
        public const string SourceVideos = "videos";

        /// <summary>
        /// Wpisy zawierające linki.
        /// </summary>
        public const string SourceLinks = "links";

        /// <summary>
        /// Wszystkie wpisy z tagami.
        /// </summary>
        public const string TagAll = "all";

        /// <summary>
        /// Zwraca wpisy flakosfery.
        /// </summary>        
        /// <returns>Wpisy flakosfery.</returns>
        public Entry[] GetFlakosphere()
        {
            return RequestGet<EntriesContainer>("/type:flakosfera").Entries;
        }

        /// <summary>
        /// Zwraca wpisy flakosfery.
        /// </summary>        
        /// <param name="source">Żródło wpisów.</param>
        /// <returns>Wpisy flakosfery.</returns>
        public Entry[] GetFlakosphere(string source)
        {
            return RequestGet<EntriesContainer>(String.Format(CultureInfo.InvariantCulture, "/type:flakosfera/source:{0}", source)).Entries;
        }

        /// <summary>
        /// Zwraca wpisy flakosfery.
        /// </summary>        
        /// <param name="source">Żródło wpisów.</param>
        /// <param name="tag">Filtruje wpisy według danego tagu.</param>
        /// <returns>Wpisy flakosfery.</returns>
        public Entry[] GetFlakosphere(string source, string tag)
        {
            return RequestGet<EntriesContainer>(String.Format(CultureInfo.InvariantCulture, "/type:flakosfera/source:{0}/tag:{1}", source, tag)).Entries;
        }

        /// <summary>
        /// Zwraca wpisy flakosfery.
        /// </summary>        
        /// <param name="source">Żródło wpisów.</param>
        /// <param name="tag">Filtruje wpisy według danego tagu.</param>
        /// <param name="avatarsSize">Rozmiar zwracanych avatarów.</param>
        /// <returns>Wpisy flakosfery.</returns>
        public Entry[] GetFlakosphere(string source, string tag, AvatarsSize avatarsSize)
        {
            return RequestGet<EntriesContainer>(String.Format(CultureInfo.InvariantCulture, "/type:flakosfera/source:{0}/tag:{1}/avatars:{2}", source, tag, avatarsSize.ToString().ToLower(CultureInfo.InvariantCulture))).Entries;
        }

        /// <summary>
        /// Zwraca wpisy flakosfery.
        /// </summary>
        /// <param name="source">Żródło wpisów.</param>
        /// <param name="tag">Filtruje wpisy według danego tagu.</param>
        /// <param name="avatarsSize">Rozmiar zwracanych avatarów.</param>
        /// <param name="comments">Czy wpis ma zawierać komentarze.</param>
        /// <returns>Wpisy flakosfery.</returns>
        public Entry[] GetFlakosphere(string source, string tag, AvatarsSize avatarsSize, bool comments)
        {
            return RequestGet<EntriesContainer>(String.Format(CultureInfo.InvariantCulture, "/type:flakosfera/source:{0}/tag:{1}/avatars:{2}/comments:{3}", source, tag, avatarsSize.ToString().ToLower(CultureInfo.InvariantCulture), comments.ToString(CultureInfo.InvariantCulture).ToLower(CultureInfo.InvariantCulture))).Entries;
        }

        /// <summary>
        /// Zwraca wpisy flakosfery.
        /// </summary>        
        /// <param name="source">Żródło wpisów.</param>
        /// <param name="tag">Filtruje wpisy według danego tagu.</param>
        /// <param name="avatarsSize">Rozmiar zwracanych avatarów.</param>
        /// <param name="comments">Czy wpis ma zawierać komentarze.</param>
        /// <param name="limit">Limit ilości.</param>
        /// <returns>Wpisy flakosfery.</returns>
        public Entry[] GetFlakosphere(string source, string tag, AvatarsSize avatarsSize, bool comments, int limit)
        {
            return RequestGet<EntriesContainer>(String.Format(CultureInfo.InvariantCulture, "/type:flakosfera/source:{0}/tag:{1}/avatars:{2}/comments:{3}/limit:{4}", source, tag, avatarsSize.ToString().ToLower(CultureInfo.InvariantCulture), comments.ToString(CultureInfo.InvariantCulture).ToLower(CultureInfo.InvariantCulture), limit)).Entries;
        }

        /// <summary>
        /// Zwraca wpisy flakosfery.
        /// </summary>        
        /// <param name="source">Żródło wpisów.</param>
        /// <param name="tag">Filtruje wpisy według danego tagu.</param>
        /// <param name="avatarsSize">Rozmiar zwracanych avatarów.</param>
        /// <param name="comments">Czy wpis ma zawierać komentarze.</param>
        /// <param name="limit">Limit ilości.</param>
        /// <param name="start">Identyfikator wpisu od którego chcemy rozpocząć pobieranie.</param>
        /// <returns>Wpisy flakosfery.</returns>
        public Entry[] GetFlakosphere(string source, string tag, AvatarsSize avatarsSize, bool comments, int limit, int start)
        {
            return RequestGet<EntriesContainer>(String.Format(CultureInfo.InvariantCulture, "/type:flakosfera/source:{0}/tag:{1}/avatars:{2}/comments:{3}/limit:{4}/start:{5}", source, tag, avatarsSize.ToString().ToLower(CultureInfo.InvariantCulture), comments.ToString(CultureInfo.InvariantCulture).ToLower(CultureInfo.InvariantCulture), limit, start)).Entries;
        }
    }
}
